package com.hulk.other.choujiang.fullBuy;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.hulk.cache.redis.RedisClient;
import com.hulk.common.DateUtil;

@Component("fullBuy")
public class FullBuy {

//	@Autowired
//	private RedisUtil redisUtil;

	@Autowired
	private RedisClient<String, String> redisClient;

//	@Resource(name = "redisTemplate")
//	protected RedisTemplate redisTemplate;

	/**
	 * @throws ServiceException
	 * 
	 *             雷------2016年6月17日
	 * 
	 * @Title: checkSoldCountByRedisDate
	 * @Description: 抢购的计数处理（用于处理超卖）
	 * @param @param key 购买计数的key
	 * @param @param limitCount 总的限购数量
	 * @param @param buyCount 当前购买数量
	 * @param @param endDate 抢购结束时间
	 * @param @param lock 锁的名称与unDieLock方法的lock相同
	 * @param @param expire 锁占有的时长（毫秒）
	 * @param @return 设定文件
	 * @return boolean 返回类型
	 * @throws
	 */
	public boolean checkSoldCountByRedisDate(String key, int limitCount,
			int buyCount, Date endDate, String lock, int expire)
			throws Exception {
		boolean check = false;
		if (redisClient.lock(lock, expire)) {
			Integer soldCount = Integer.parseInt(redisClient.get(key).toString());// 已卖数
			Integer totalSoldCount = (soldCount == null ? 0 : soldCount)// 总已卖数
					+ buyCount;
			System.out.println(totalSoldCount);
			if (totalSoldCount <= limitCount) {
				redisClient.set(key, totalSoldCount,
						DateUtil.diffDateTime(endDate, new Date()));
				check = true;
			}else{
				System.out.println("所有奖品已抢完，敬请期待下次活动。");
			}
			redisClient.unDieLock(lock);
		} else {
			if (redisClient.unDieLock(lock)) {
				System.out.println("解决了出现的死锁");
			} else {
				throw new Exception("活动太火爆啦,请稍后重试");
			}
		}
		return check;
	}
}
